home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
gnu
/
nethack.lha
/
nethack-3.1
/
src
/
rip.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-05-26
|
3KB
|
131 lines
/* SCCS Id: @(#)rip.c 3.1 91/08/05
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
#include "hack.h"
static void FDECL(center, (int, char *));
extern const char *killed_by_prefix[];
static const char *rip_txt[] = {
" ----------",
" / \\",
" / REST \\",
" / IN \\",
" / PEACE \\",
" / \\",
" | |", /* Name of player */
" | |", /* Amount of $ */
" | |", /* Type of death */
" | |", /* . */
" | |", /* . */
" | |", /* . */
" | 1001 |", /* Real year of death */
" *| * * * | *",
" _________)/\\\\_//(\\/(/\\)/\\//\\/|_)_______",
0
};
#define STONE_LINE_CENT 28 /* char[] element of center of stone face */
#define STONE_LINE_LEN 16 /* # chars that fit on one line
* (note 1 ' ' border)
*/
#define NAME_LINE 6 /* *char[] line # for player name */
#define GOLD_LINE 7 /* *char[] line # for amount of gold */
#define DEATH_LINE 8 /* *char[] line # for death description */
#define YEAR_LINE 12 /* *char[] line # for year */
char **rip;
static void
center(line, text)
int line;
char *text;
{
register char *ip,*op;
ip = text;
op = &rip[line][STONE_LINE_CENT - ((strlen(text)+1)>>1)];
while(*ip) *op++ = *ip++;
}
void
outrip(how, tmpwin)
int how;
winid tmpwin;
{
register char **dp;
register char *dpx;
char buf[BUFSZ];
register int x;
int line;
rip = dp = (char **) alloc(sizeof(rip_txt));
if (!dp) return;
for (x = 0; rip_txt[x]; x++) {
dp[x] = (char *) alloc((unsigned int)(strlen(rip_txt[x]) + 1));
if (!dp[x]) return;
Strcpy(dp[x], rip_txt[x]);
}
dp[x] = (char *)0;
/* Put name on stone */
Sprintf(buf, "%s", plname);
buf[STONE_LINE_LEN] = 0;
center(NAME_LINE, buf);
/* Put $ on stone */
Sprintf(buf, "%ld Au", u.ugold);
buf[STONE_LINE_LEN] = 0; /* It could be a *lot* of gold :-) */
center(GOLD_LINE, buf);
/* Put together death description */
switch (killer_format) {
default: impossible("bad killer format?");
case KILLED_BY_AN:
Strcpy(buf, killed_by_prefix[how]);
Strcat(buf, an(killer));
break;
case KILLED_BY:
Strcpy(buf, killed_by_prefix[how]);
Strcat(buf, killer);
break;
case NO_KILLER_PREFIX:
Strcpy(buf, killer);
break;
}
/* Put death type on stone */
for (line=DEATH_LINE, dpx = buf; line<YEAR_LINE; line++) {
register int i,i0;
char tmpchar;
if ( (i0=strlen(dpx)) > STONE_LINE_LEN) {
for(i = STONE_LINE_LEN;
((i0 > STONE_LINE_LEN) && i); i--)
if(dpx[i] == ' ') i0 = i;
if(!i) i0 = STONE_LINE_LEN;
}
tmpchar = dpx[i0];
dpx[i0] = 0;
center(line, dpx);
if (tmpchar != ' ') {
dpx[i0] = tmpchar;
dpx= &dpx[i0];
} else dpx= &dpx[i0+1];
}
/* Put year on stone */
Sprintf(buf, "%4d", getyear());
center(YEAR_LINE, buf);
putstr(tmpwin, 0, "");
for(; *dp; dp++)
putstr(tmpwin, 0, *dp);
putstr(tmpwin, 0, "");
putstr(tmpwin, 0, "");
}
/*rip.c*/